1. Technical Field
The present invention relates in general to a system and method for partitioning processing across heterogeneous processors. More particularly, the present invention relates to a system and method selecting one of the heterogeneous processors to run an object based upon computational and load considerations.
2. Description of the Related Art
Computer systems are becoming more and more complex. The computer industry typically doubles the performance of a computer system every 18 months (i.e. personal computer, PDA, gaming console). In order for the computer industry to accomplish this task, the semiconductor industry produces integrated circuits that double in performance every 18 months. A computer system uses integrated circuits for particular functions based upon the integrated circuits' architecture. Two fundamental architectures are 1) microprocessor-based and 2) digital signal processor-based.
An integrated circuit with a microprocessor-based architecture is typically used to handle control operations whereas an integrated circuit with a digital signal processor-based architecture is typically designed to handle signal-processing manipulations (i.e. mathematical operations). As technology evolves, the computer industry and the semiconductor industry realized the importance of using both architectures, or processor types, in a computer system design.
Software is another element in a computer system that has been evolving alongside integrated circuit evolution. A software developer writes code in a manner that corresponds to the processor type that executes the code. For example, a processor has a particular number of registers and a particular number of arithmetic logic units (ALUs) whereby the software developer designs code to most effectively use the registers and the ALUs. In addition, the compiler used by the software developer is traditionally designed to compile code to operate on a specific processor environment. This traditionally limits the developer's function to operate on a single environment. At runtime, the compiled code is loaded and executed by the processor.
As the semiconductor industry incorporates multiple processor types onto a single device, a challenge found for the software developer is to write code based upon a multiple processor type architecture. A software developer's code includes a plurality of subtasks whereby each subtask may be designed to run on a particular processor type. For example, a subtask that manages “control” operations is better suited to run on a microprocessor.
However, there are many subtasks that run adequately on either processor type. In this case, the subtask would be best run on a processor that is not heavily loaded at a particular time. A challenge found, however, is that existing art requires a software developer to identify a processor type at compilation, not at runtime. A notable exception to this, however, is an environment that uses a “virtual machine” (such as a Java Virtual Machine (JVM), so that the applications are compiled to operate using the virtual machine with each supported operating environment employing a different version of the virtual machine that operates on the operating environment. A challenge of virtual machines, however, is that they require system resources to manage the virtual environment (i.e., a garbage-collected heap, etc.) and, because the application code is being performed by a virtual machine rather than directly by a processor, virtual machine code is traditionally slower and less efficient than code that executes directly on a processor.
What is needed, therefore, is a system and method to compile source code into a plurality of object files adapted to execute on a plurality of processor operating environments. What is further needed is a system and method that selects the object file to execute based upon current computer system operational considerations.